package br.com.documentos.model.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import br.com.documentos.controller.AtivacaoServlet;
import br.com.documentos.model.entity.Usuario;
import br.com.documentos.model.util.CriptografiaUtil;
import br.com.documentos.model.util.StringUtil;

@Component("ativador")
@Transactional(propagation=Propagation.REQUIRED, rollbackFor=Exception.class)
public class AtivadorConta {

	public static final String CHAVE_CRIPTOGRAFIA_EMAIL = "Q!W@e3r4";
	
	@Autowired
	private UsuarioService usuarioService;
	
	public Usuario ativarConta( String emailCriptografado, String senhaCriptografada )
	{
		String email = CriptografiaUtil.descriptaUrlComChave(emailCriptografado, CHAVE_CRIPTOGRAFIA_EMAIL);
		
		if( StringUtil.isNotEmpty(email) )
		{
			Usuario usuario = usuarioService.buscarPorEmail(email);
			
			if( usuario != null && ! usuario.isAtivo() )
			{
				String senhaCriptografadaOriginal = CriptografiaUtil.encriptarMD5(usuario.getSenha());
				
				senhaCriptografada = CriptografiaUtil.descriptaUrl(senhaCriptografada);
				
				if( senhaCriptografada.equals(senhaCriptografadaOriginal) ){
					usuario.ativar();
					return usuario;
				}
			}
		}
		return null;
	}
	
	public String geraEnderecoAtivacao( Usuario usuario, String urlBase )
	{
		StringBuilder enderecoAtivacao = new StringBuilder(urlBase);
		enderecoAtivacao.append(AtivacaoServlet.ENDERECO_ATIVACAO);
		enderecoAtivacao.append("?");
		enderecoAtivacao.append(AtivacaoServlet.EMAIL_PARAM);
		enderecoAtivacao.append("=");
		enderecoAtivacao.append( CriptografiaUtil.encriptaUrlComChave(usuario.getEmail(), CHAVE_CRIPTOGRAFIA_EMAIL) );
		enderecoAtivacao.append("&");
		enderecoAtivacao.append(AtivacaoServlet.SENHA_PARAM);
		enderecoAtivacao.append("=");
		String senhaCriptada = CriptografiaUtil.encriptarMD5(usuario.getSenha());
		enderecoAtivacao.append( CriptografiaUtil.encriptaUrl(senhaCriptada) );
		
		return enderecoAtivacao.toString();
	}
	
}
